package com.tegtech.starter.oshi.domain.server;

import java.lang.management.ManagementFactory;

import com.tegtech.common.utils.date.DatePattern;
import com.tegtech.common.utils.date.DateUtils;

import cn.hutool.core.util.NumberUtil;
import lombok.Data;

/**
 * JVM相关信息
 *
 * @author Jun
 */
@Data
public class Jvm {
	
	/**
	 * 当前JVM占用的内存总数(M)
	 */
	private double total;

	/**
	 * JVM最大可用内存总数(M)
	 */
	private double max;

	/**
	 * JVM空闲内存(M)
	 */
	private double free;

	/**
	 * JDK版本
	 */
	private String version;

	/**
	 * JDK路径
	 */
	private String home;

	public double getTotal() {
		return NumberUtil.div(total, (1024 * 1024), 2);
	}

	public double getMax() {
		return NumberUtil.div(max, (1024 * 1024), 2);
	}

	public double getFree() {
		return NumberUtil.div(free, (1024 * 1024), 2);
	}

	public double getUsed() {
		return NumberUtil.div(total - free, (1024 * 1024), 2);
	}

	public double getUsage() {
		return NumberUtil.mul(NumberUtil.div(total - free, total, 4), 100);
	}

	/**
	 * 获取JDK名称
	 */
	public String getName() {
		return ManagementFactory.getRuntimeMXBean().getVmName();
	}

	/**
	 * JDK启动时间
	 */
	public String getStartTime() {
		return DateUtils.formatDate(DateUtils.getServerStartDate(), DatePattern.YYYY_MM_DD_HH_MM_SS);
	}

	/**
	 * JDK运行时间
	 */
	public String getRunTime() {
		return DateUtils.getDatePoor(DateUtils.getServerStartDate(), DateUtils.now());
	}
}
